/* ===========================================================
 * sw-registration.js
 * ===========================================================
 * Copyright 2016 @huxpro
 * Licensed under Apache 2.0
 * Register service worker.
 * ========================================================== */

// SW Version Upgrade Ref: <https://youtu.be/Gb9uI67tqV0>

function handleRegistration(registration) {
  console.log("Service Worker Registered. ", registration);
  /**
   * ServiceWorkerRegistration.onupdatefound
   * The service worker registration's installing worker changes.
   */
  registration.onupdatefound = (e) => {
    const installingWorker = registration.installing;
    installingWorker.onstatechange = (e) => {
      if (installingWorker.state !== "installed") return;
      if (navigator.serviceWorker.controller) {
        console.log("SW is updated");
      } else {
        console.log("A Visit without previous SW");
        createSnackbar({
          message: "App ready for offline use.",
          duration: 3000,
        });
      }
    };
  };
}

if (navigator.serviceWorker) {
  // For security reasons, a service worker can only control the pages
  // that are in the same directory level or below it. That's why we put sw.js at ROOT level.
  navigator.serviceWorker
    .register("/sw.js")
    .then((registration) => handleRegistration(registration))
    .catch((error) => {
      console.log("ServiceWorker registration failed: ", error);
    });

  // register message receiver
  // https://dbwriteups.wordpress.com/2015/11/16/service-workers-part-3-communication-between-sw-and-pages/
  navigator.serviceWorker.onmessage = (e) => {
    console.log("SW: SW Broadcasting:", event);
    const data = e.data;

    if (data.command == "UPDATE_FOUND") {
      console.log("UPDATE_FOUND_BY_SW", data);
      createSnackbar({
        message: "Content updated.",
        actionText: "refresh",
        action: function (e) {
          location.reload();
        },
      });
    }
  };
}
